Amazon EC2 スポットインスタンスについて整理とスポットインスタンスリクエストをやってみる

Amazon EC2 スポットインスタンスについて整理とスポットインスタンスリクエストをやってみる

Clock Icon2024.09.25

こんにちは。まるとです。
皆さんはスポットインスタンスを使っていますか?

恥ずかしながら、資格試験の勉強で軽く読んだ程度で、実際にはまだ触ったことがありません。
概念だけ知っているのももったいないので、今回は実際に触ってみて自身のメモ代わりに記事を書いていきます。

スポットインスタンスとは

改めてスポットインスタンスとは何かを見ていきます。
詳しい説明は下記のURLでも示されているとおり、AWSドキュメント「スポットインスタンス」に記載があります。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-spot-instances.html

要点をかなりまとめて説明すると以下のようになります。

  • 未使用のEC2インスタンス(余っているリソース、スポットインスタンスとして割り当てられているスポットキャパシティープール上のインスタンス)をオンデマンド価格から大幅に割引された価格で利用できる
  • 需要と供給に応じて5分ごとに1時間当たりの価格が"緩やかに"変動する
  • 中断される可能性があるインスタンス

になるのではないかと思います。

AWSには様々なインスタンスタイプがありますが、必ずしも全てのインスタンスタイプが常に100%使用されている訳ではありません。スポットインスタンスは未使用(もしくは空いている割合が高い)のインスタンスを大幅な割引で利用できる方法です。

なお、料金は以下のページで確認することができます。

https://aws.amazon.com/jp/ec2/spot/pricing/

変動型料金と聞くと、需要が急激に高くなった時に料金も高くなるのでは?と思うかもしれませんが、このドキュメント

スポットインスタンス料金は Amazon EC2 で設定され、スポットインスタンス容量に対する長期の需給傾向に基づいて緩やかに調整されます。

スポットリクエストが受理されると、オンデマンド料金を超えない現在のスポット料金で、スポットインスタンス が起動されます。

と記載されているため、オンデマンド料金は超えない範囲でかつ、緩やかに料金が変動するためご安心いただければと思います。(後ほど言及しますが、1時間あたりの上限金額も指定できます。)

その他、要点で「中断される可能性があるインスタンス」という項目について、あくまでもスポットインスタンスは空いているリソースを利用したインスタンスとなるため、需要が高くなりリソースが枯渇すると、スポットインスタンスが中断(削除、停止、または休止)されます。

実際に利用する時、どれくらいの頻度で中断の可能性があるのか?というのも直近一カ月間のデータが公開されています。

https://aws.amazon.com/jp/ec2/spot/instance-advisor/

上記のページには中断の頻度のほか、オンデマンドインスタンスと比較したときの費用節減の割合が記載されています。
本記事執筆時点では、13〜90%とかなり上下に差がありますが、極端な割引率を除くと約40%〜ぐらいの割引となっていました。

ちなみに...

料金の上限値を指定しない場合、オンデマンド料金を超えることはないと記載しましたが、「では、料金の上限値にそこそこの金額を入れて、常にスポットインスタンスを使えば、中断されずに安く運用できるのでは?」と思うかもしれません。

これに関しては、できないという回答になります。
AWS ホワイトペーパーの「スポットインスタンスのしくみ」にも記載がありますが

上限料金を高く設定しても、スポットインスタンスが起動する可能性が高くなることも、スポットインスタンスが中断される可能性が低くなることもありません。これは、EC2 が容量を必要とした場合であれば、上限料金にかかわらず、お客様のスポットインスタンスを中断することがあるためです。

というように、必要な場合はスポットインスタンスを中断する旨の記載があります。

引用元 (2024/9/25 確認)

https://docs.aws.amazon.com/ja_jp/whitepapers/latest/cost-optimization-leveraging-ec2-spot-instances/how-spot-instances-work.html

どんなユースケースに使えるか

中断されることが前提となるため、連続、長期的に使用しないユースケースの場合はスポットインスタンスを使用することで、コストを抑えつつ柔軟にリソースを活用できます。

例えば

  • 一時的なバッチ処理
  • 短期的な開発やテスト環境
  • 一時的なスケーリング

などが挙げられます。

実際にAmazon EC2 スポットインスタンスをリクエストしてみる

では、実際にAmazon EC2 スポットインスタンスをリクエストしてみます。
なお、インスタンス一覧にあるインスタンスを起動ボタンもスポットインスタンスの購入が行えますが、今回は、Amazon EC2のコンソール内のサイドバー「インスタンス > スポットリクエスト」を実施します。

Amazon EC2のコンソール内のサイドバー「インスタンス > スポットリクエスト」を選択すると、スポットインスタンスのリクエストというボタンが表示されるため押下します。

ma-7-1

続いて、AMIやキーペアなどの起動パラメータを定義します。

今回はシンプルにAmazon Linux 2023を立ち上げたいので、該当するAMI(本記事ではAmazon Linux 2023 AMI (ami-04645e39a4df17be7))を選択します。

ma-7-2

続いて、欲しいリソース数(ターゲット容量)を選択します。
ターゲット容量はインスタンス数、vCPU、メモリ(MiB)から選択できますが、今回はシンプルにインスタンス数を指定していきます。

また、その他オプションとして、ターゲット容量を維持するスポットインスタンスの最大コストを設定するという項目があります。

ターゲット容量を維持するという項目については、スポットインスタンスが中断された場合に合計ターゲット容量を維持できるよう、再度スポットインスタンスをリクエストする仕組みです。

ma-7-3

また、このオプションを有効にすると中断動作を選択できるようになります。
デフォルトではスポットインスタンスの中断動作は終了(つまり削除)ですが、停止休止状態を選択できるようになります。

ただし、停止休止状態の場合は、EBS料金が発生します。

続いて、スポットインスタンスの最大コストを設定するというオプションですが、これは項目名の通り、1時間あたりの料金が閾値を超えたらインスタンスを中断する、という設定ができるものです。
設定を行わない場合は、オンデマンド価格が上限値に設定されます。

今回は3インスタンスをターゲット容量に指定してみたいと思います。

ma-7-4

最後に欲しいインスタンスタイプの要件を指定します。
スペック要件に一致するインスタンスタイプを自動指定する方法と自身でインスタンスタイプを指定する2つの方法があります。

本検証では自身でインスタンスタイプを指定します。
インスタンスタイプを手動で選択を押下し、欲しいインスタンスタイプを選択して追加します。
今回は検証用なので、t3系のお手頃なインスタンスタイプを選択しました。

ma-7-5

それでは、実際にリクエストをしていきます。
各項目設定完了後に作成というボタンを押下すると、スポットインスタンスのリクエストが送信されます。

状況にもよりますが、本検証ではすぐにリクエストが受理され、インスタンスが3つ起動しました。
インスタンス一覧のページでも起動していることが確認できます。

ma-7-6

ma-7-7

なお、今回の要件では65%節約したとのことでした。お得ですね。

ma-7-8

まとめ

今回はスポットインスタンスについて改めて自身の中で整理し、実際にスポットインスタンスを起動するまでしました。

「リクエスト」、と記載があるのでインスタンスの手配に時間がかかるかな、と思いましたが予想以上に簡単かつ早くインスタンスを起動できました。
また、かなり安くインスタンスを手配できたため、ユースケースが合致すれば、うまく活用できると思いました。

今回の記事は以上となります。
お読みいただきありがとうございました。

参考文献

https://docs.aws.amazon.com/ja_jp/whitepapers/latest/cost-optimization-leveraging-ec2-spot-instances/how-spot-instances-work.html

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/how-spot-instances-work.html

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-spot-instances-history.html

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/spot-requests.html

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.